1. Technical Field
The present invention relates generally to data management in a complex computer system and, in particular, to a method of reusing software elements in such a system to facilitate efficient intermediate data caching.
2. Description of the Related Art
Intermediaries are computational entities that can be positioned anywhere along a data stream, e.g., an HTTP stream, and are programmed to tailor, customize, personalize, or otherwise distill or enhance data as it flows along the stream. A caching web proxy is a simple example of an HTTP intermediary. Intermediary-based programming is particularly useful for adding functionality to a system when the data producer (e.g., a server or database) or the data consumer (e.g., a browser) cannot be modified.
A known intermediary architecture and framework, called Web Intermediaries (or WBI, pronounced xe2x80x9cwebbyxe2x80x9d), is useful for creating intermediary applications on the web. Basically, WBI is a programmable web proxy and web server that, together with a web development kit, may be used with Java APIs for building web intermediary applications within the WBI framework. Examples of intermediary applications include: transcoding content between formats, personalization, password and privacy management, interactivity, and content filtering. WBI is just one example of an architecture for managing web intermediaries. Other conceptual techniques include, for example, chaining of Java-based servlets.
Transcoding is the process by which a data object in one representation is converted into another representation. Typical examples include conversion within media types (e.g., an image encoded in one standard is transcoded into an image encoded in a second standard), as well as conversion between media types (e.g., speech to text). A transcoder is a functional module, typically in the form of a piece of computer code, that accepts a data stream as input and produces a data stream as output. The output stream is created based on the transcoder""s input stream and the function that the transcoder is designed to perform. A set of xe2x80x9cnxe2x80x9d transcoders may be chained or otherwise grouped together to form a transcoder proxy framework. In a given transcoder, the transcoding function could be one of any number of operations such as: a request modifier, a content editor, a content generator, or the like. A given transcoder output stream may also be based upon an original or modified request, histographical information on transcoding paths already taken, and/or external preferences (e.g., network connection speed, client device capabilities, user preferences, and the like) established in a separate database.
The WBI backbone provides a well-defined interface, known as a sublayer, for receiving requests and generating responses. In a server supporting the WBI framework, there may exist multiple sublayers, each accepting requests from a different source (e.g., a proxy listening on a port, a serial port, a servlet, and the like) and handling a specific protocol (e.g., HTTP, FTP, POP3, and the like). A sublayer is responsible for instructing the WBI backbone on how to process a request by providing a set of rules that describe how to generate a response. The backbone provides a rules engine (RE) that uses the rules provided to map a request to a set of plug-ins that then perform the actual content transcoding. In generating a response to a given request, a number of intermediate steps (plug-ins) also may be executed.
It is desirable to re-use the output of these intermediate steps, because many requests (from different clients) will likely contain steps in common and, because the overhead of regenerating like output can be avoided by providing a caching mechanism. Likewise, a given client may make a request for the same resource that was requested in the recent past. For example, assume a user logs in to his account to check the status of an online order. If the order status has not changed, it should not be necessary to regenerate the status page to be returned. The page should have been cached, with the lifetime of the page being controlled by cache expiration policies.
One of the main problems in caching of intermediate data, however, is the appropriate granularity of caching. If the number of intermediate points in execution at which the data is cached is not properly balanced with the time taken to produce and save the intermediate data, then intermediate caching is counterproductive to system performance.
The present invention addresses the problem of how to effectively perform intermediate caching in a complex software system such as the type described above.
According to the present invention, a set of program elements (e.g., transcoders) are grouped together and, for caching purposes, are administered as a unit. Instead of caching the individual outputs of each program element, preferably only the aggregate output of the set of program elements, taken as a whole, is cached. The inventive technique enables the effective re-use of the program elements and the intermediate content produced thereby. In an illustrative client-server based implementation, e.g., a transcoding proxy located at a server, the cached information may be shared across multiple server instances to obviate redundant processing of client requests.
Thus, it is a specific object of the present invention to group program elements together in a complex software system by caching an aggregate output so that computations are not repeated when unnecessary and excessive caching is avoided. It is a particular object of the invention to provide such a caching mechanism in the domain of transcoding data from the Web.
It is another primary object of the present invention to provide a mechanism for grouping a set of related transcoders together for caching purposes. As an illustrative example, a group of related transcoders are a set of software routines that transcode images from a given image format (e.g., gif) to one or more other image formats (e.g., .png, .jpeg, or the like). Another example of a group of related transcoders includes transcoders that convert data from one format to another data format. Thus, for purposes of intermediate caching according to the present invention, the individual transcoders in a group may have a given relationship to one another.
In a particular embodiment, a set of transcoders that are operative in a transcoding framework and that share a set of preference categories (e.g., given network, user or device preferences) are grouped together to decrease the frequency of intermediate caching in the framework. Thus, instead of caching the output of every transcoder, only the group output is cached.
According to another feature of the present invention, a group of related transcoders preferably is defined by a system administrator. By enabling administrator control over the granularity of intermediate caching, overall system performance is spread over many client requests and is thus maximized.
With the present invention, a caching mechanism in a complex software system may be extended in a user-configurable manner by setting up optimal intermediate caching points that are defined by groups of programs used in long computations, thereby balancing space and time resources in the system.
The foregoing has outlined some of the more pertinent objects and features of the present invention. These objects should be construed to be merely illustrative of some of the more prominent features and applications of the invention. Many other beneficial results can be obtained by applying the disclosed invention in a different manner or modifying the invention as will be described. Accordingly, other objects and a fuller understanding of the invention may be had by referring to the following Detailed Description of the Preferred Embodiment.